package com.wcpdoc.base.service.impl;


import com.wcpdoc.base.dao.LabelDao;
import com.wcpdoc.base.entity.Label;
import com.wcpdoc.base.service.LabelService;
import com.wcpdoc.core.dao.BaseDao;
import com.wcpdoc.core.exception.MyException;
import com.wcpdoc.core.service.impl.BaseServiceImp;
import com.wcpdoc.core.util.ValidateUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 用户服务层实现
 * <p>
 * v1.0 zhanghc 2016-6-15下午17:24:19
 */
@Service
public class LabelServiceImpl extends BaseServiceImp<Label> implements LabelService {
    @Resource
    private LabelDao labelDao;


    @Override
    @Resource(name = "labelDaoImpl")

    public void setDao(BaseDao<Label> dao) {
        super.dao = dao;
    }

    @Override
    public void add(Label label) {
        System.out.println(label);
        // 数据校验
        if (!(getCurUser().getType() == 0 || getCurUser().getType() == 2)) {
            // 管理员和子管理才能删除更新
            throw new MyException("参数错误：type");
        }
        addValid(label);
        // 添加

        label.setUpdateUserId(getCurUser().getId());
        label.setUpdateTime(new Date());
        label.setState(1);

        labelDao.add(label);

    }


    @Override
    public void edit(Label label) {
        addValid(label);
        // 用户修改
        Label entity = getEntity(label.getId());
        if (!(getCurUser().getType() == 0 || getCurUser().getType() == 2)) {
            // 管理员和子管理才能删除更新
            throw new MyException("参数错误：type");
        }
        entity.setName(label.getName());
        entity.setUpdateTime(new Date());
        entity.setUpdateUserId(getCurUser().getId());
        update(entity);
    }

    @Override
    public void del(Integer id) {
        // 数据校验
        if (!ValidateUtil.isValid(id)) {
            throw new MyException("参数错误：id");
        }
        if (!(getCurUser().getType() == 0 || getCurUser().getType() == 2)) {// 管理员和子管理才能删除
            throw new MyException("参数错误：type");
        }
        Label label = getEntity(id);
        // 删除标签
        label.setState(0);
        label.setUpdateTime(new Date());
        label.setUpdateUserId(getCurUser().getId());
        update(label);

    }


    @Override
    public Label getLabel(Integer id) {
        return labelDao.getLabel(id);
    }

    @Override
    public List<Label> getList() {
        return labelDao.getList();
    }

    private void addValid(Label label) {
        if (!ValidateUtil.isValid(label.getName())) {
            throw new MyException("参数错误:标签名称不能为空");
        }

        if (label.getName().length() > 20) {
            throw new MyException("参数错误:标签名称不能超过20个字符");
        }
    }

    @Override
    public List<Map<String, Object>> getListUser(String id) {
        return null;
    }
}
